﻿Public Class FrmClient

    Dim acceso As New acceso_a_datos(acceso_a_datos.motores.sqlserver)
    Private modificar As Boolean = False  'variable para diferenciar si se modifica(true) o es un nuevo cliente(false)
    Private modificarContacto As Boolean = False 'variable para ver si modifico (true) o es un nuevo (false) contacto
    Private nro As Integer = 0 'variable para guardar el nro del cliente
    Private idContacto As Integer = 0 'variable para q al hacer double click en contacto me guarde el id del mismo
    Dim combo As New carga_combo
    Dim daoCli As New DAOCliente
    Public Sub New()
        'al iniciar la pantalla carga todos los combos
        InitializeComponent()
        cargarComboBarrio()
        cargarComboLocalid()
        desabilitarCombos()
        cargarComboCondicionIva()
        cargarGrilla()
    End Sub

    Public Sub New(ByVal modif As Boolean)
        'constructor para saber si se modifica un cliente o se carga uno nuevo
        'al iniciar la pantalla carga todos los combos
        InitializeComponent()
        cargarComboBarrio()
        cargarComboLocalid()
        desabilitarCombos()
        cargarComboCondicionIva()
        cargarGrilla()
        'mando x parametro si modifico (true) o guardo uno nuevo (false)
        modificar = modif
    End Sub

    Private Sub desabilitarCombos()
        'desabililito combos al iniciar el form
        groupBox1.Enabled = False
        groupBox3.Enabled = False
        btnAceptar.Enabled = False
        tabControl1.Enabled = False
        btnAgregar.Enabled = False
        btnCancelar.Enabled = False
        btnQuitar.Enabled = False
    End Sub

    Private Sub habilitarCombosCliente()
        'habilita los combos
        groupBox1.Enabled = True
        groupBox3.Enabled = True
        btnAceptar.Enabled = True
        btnCancelar.Enabled = True
    End Sub

    Private Sub habilitarCombosContacto()
        'habilita los combos de los contactos
        groupBox5.Enabled = True
        btnAgregar.Enabled = True
        btnQuitar.Enabled = True
        tabControl1.Enabled = True

    End Sub


    Private Sub btnMasLocal_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnMasLocal.Click
        'metodo que llama al form Localidad
        Dim gene As New FrmLocalidad(Me)
        gene.ShowDialog()
    End Sub

    Private Sub btnMasBarrio_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnMasBarrio.Click
        'metodo que llama al form barrio
        Dim gene As New FrmBarrios(Me)
        gene.ShowDialog()
    End Sub

    Private Sub cargarComboBarrio() 'metodo que carga el combo barrio
        acceso._tabla = "T_BARRIOS"
        combo.cargar(cmbBarrio, acceso.leo_tabla(), "ID_BARRIO", "NOMBRE")
        cmbBarrio.SelectedIndex = 0

    End Sub
    Private Sub cargarComboLocalid() 'metodo que carga el combo localidad
        acceso._tabla = "T_LOCALIDADES"
        combo.cargar(cmbLocalidad, acceso.leo_tabla(), "ID_LOCALIDAD", "NOMBRE")
        cmbLocalidad.SelectedIndex = 0
    End Sub

    Private Sub cargarComboCondicionIva() 'metodo que carga el combo Condicion IVA
        acceso._tabla = "T_TIPOS_COND_IVA"
        combo.cargar(cmbCondicionIva, acceso.leo_tabla(), "ID_TIPO_COND_IVA", "NOMBRE")
        cmbCondicionIva.SelectedIndex = 0
    End Sub


    Private Sub txtNroCalle_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtPiso.KeyPress, txtNroCalle.KeyPress, txtDepto.KeyPress, txtCP.KeyPress
        If [Char].IsDigit(e.KeyChar) Then
            e.Handled = False
        ElseIf [Char].IsControl(e.KeyChar) Then
            e.Handled = False
        ElseIf [Char].IsSeparator(e.KeyChar) Then
            e.Handled = False
        Else
            e.Handled = True
        End If
    End Sub

    Private Sub btnAceptar_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnAceptar.Click 'evento q guarda los datos

        If txtRazonSocial.Text = "" OrElse txtCalle.Text = "" Then 'campo razon social obligatorio
            MessageBox.Show("Campo 'Razon Social' y 'Calle' obligatorios")
            Return
        End If

        If modificar = True Then 'pregunto si estoy modificando o guardando un cliente nuevo
            daoCli.DAOModificarCliente(objetoCliente, nro) 'modifico los datos del cliente
            limpiarForm()
            desabilitarCombos()
            cargarGrilla()
        Else
            daoCli.DAOInsertCliente(objetoCliente) 'PRIMERO GUARDO EL CLIENTE
            'pregunto si quiere agregar contactos a ese cliente
            If MessageBox.Show("Desea agregar contactos al cliente", "¿AGREGAR CONTACTOS?", MessageBoxButtons.YesNo) = DialogResult.Yes Then
                habilitarCombosContacto() 'habilito los comandos para ingresar datos del nuevo cliente
                groupBox1.Enabled = False 'desabilito los datos del cliente para q no los cambie
                btnAceptar.Enabled = False 'desabilito el boton guardar
                cargarGrilla() 'hago foco en la pestaña con los datos
                tabControl1.SelectedIndex = 1
            Else
                limpiarForm()
                desabilitarCombos()
                cargarGrilla()
            End If
        End If

    End Sub

    Private Sub btnNuevo_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnNuevo.Click 'al hacer nuevo te trae el ultimo id
        limpiarForm()
        habilitarCombosCliente()
        Dim id As Integer = daoCli.DAOBuscarUltimoIDCliente()
        txtNroCliente.Text = Convert.ToString(id)
    End Sub

    Private Sub btnCancelar_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnCancelar.Click
        Me.Close()
    End Sub

    Private Function objetoCliente() As NEGCliente
        'creo el objeto con los datos del cliente
        Dim cli As New NEGCliente()
        cli.barrio = cmbBarrio.SelectedIndex + 1
        cli.localidad = cmbLocalidad.SelectedIndex + 1

        If txtCalle.Text <> "" Then
            cli.calle = txtCalle.Text
        End If
        'pregunto xq si no se ecribe nada la conver no anda
        If txtCP.Text <> "" Then
            cli.cp = Integer.Parse(txtCP.Text)
        End If
        If txtDepto.Text <> "" Then
            cli.depto = Integer.Parse(txtDepto.Text)
        End If

        cli.mail = txtMail.Text
        If txtNroCalle.Text <> "" Then
            cli.nro = Integer.Parse(txtNroCalle.Text)
        End If
        cli.observ = txtObserGral.Text
        If txtPiso.Text <> "" Then
            cli.piso = Integer.Parse(txtPiso.Text)
        End If
        cli.razonSocial = txtRazonSocial.Text
        If txtTel.Text <> "" Then
            cli.tel = Long.Parse(txtTel.Text)
        End If
        cli.idCondIva = cmbCondicionIva.SelectedIndex + 1
        If txtCuit.Text <> "" Then
            cli.cuit = Long.Parse(txtCuit.Text)
        End If
        If txtIngresosBrutos.Text <> "" Then
            cli.ingBrutos = Long.Parse(txtIngresosBrutos.Text)
        End If
        If txtCtaCte.Text <> "" Then
            cli.ctaCte = Long.Parse(txtCtaCte.Text)
        End If
        If Me.txtLimiteCred.Text <> "" Then
            cli.limiteCred = Long.Parse(Me.txtLimiteCred.Text)
        End If
        Return cli
    End Function

    Private Function objetoContacto() As NEGContacto 'creo los contactos del cliente
        Dim conta As New NEGContacto()
        conta.nombre = txtNombre.Text
        conta.ape = txtApe.Text
        conta.descrip = txtDescrip.Text
        conta.mail = txtMailCont.Text
        conta.observ = txtObserCont.Text
        If txtTelCont.Text <> "" Then
            conta.tel = Long.Parse(txtTelCont.Text)
        End If
        Return conta
    End Function

    Private Sub limpiarForm() 'limpio la pantalla
        txtDepto.Text = ""
        txtCalle.Text = ""
        txtCP.Text = ""
        txtMail.Text = ""
        txtNroCalle.Text = ""
        txtNroCliente.Text = ""
        txtObserGral.Text = ""
        txtPiso.Text = ""
        txtRazonSocial.Text = ""
        txtTel.Text = ""
        txtNombre.Text = ""
        txtApe.Text = ""
        txtDescrip.Text = ""
        txtMailCont.Text = ""
        txtObserCont.Text = ""
        dataGridView2.DataSource = Nothing
        txtCuit.Text = ""
        txtIngresosBrutos.Text = ""
        txtCtaCte.Text = ""
        txtLimiteCred.Text = ""
    End Sub

    Private Sub limpiarContacto() 'limpia el form contacto al agregar uno
        txtNombre.Text = ""
        txtApe.Text = ""
        txtDescrip.Text = ""
        txtMailCont.Text = ""
        txtObserCont.Text = ""

    End Sub

    Private Sub cargarGrilla() 'carga la grilla con todos los clientes
        dataGridView1.AutoGenerateColumns = False  'deja solo las columnas que defino en el datagrid
        dataGridView1.DataSource = daoCli.cargarGrillaCliente()

    End Sub

    Private Sub cargarGrillaContacto()
        'carga la grilla con los contactos
        Dim id As Integer = Integer.Parse(txtNroCliente.Text)
        dataGridView2.DataSource = daoCli.cargarGrillaContacto(id)
    End Sub

    Private Sub btnAgregar_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnAgregar.Click 'evento que guarda contactos al cliente
        Dim nroCli As Integer = Integer.Parse(txtNroCliente.Text)
        If modificarContacto = True Then 'veo si modifico o agrego un nuevo contacto
            If daoCli.DAOModificarContacto(objetoContacto(), idContacto, nroCli) = True Then
                MessageBox.Show("contacto modificado")
                limpiarContacto()

            End If
        Else

            If daoCli.DAOInsertarContactosClie(objetoContacto(), nroCli) = True Then
                MessageBox.Show("Se agrego el contacto correctamente")
                cargarGrillaContacto()
                'dataGridView2.Columns["codClien"].Visible = false;
                limpiarContacto()
                tabControl1.Focus()
                dataGridView1.Focus()
            End If
        End If
    End Sub
    'evento q al hacer double click cargue al cLIENTE
    Private Sub dataGridView1_CellDoubleClick(ByVal sender As Object, ByVal e As DataGridViewCellEventArgs) Handles dataGridView1.CellDoubleClick

        modificar = True 'al hacer doble click en la grilla pongo la bandera en true para saber q voy a modificar.
        habilitarCombosCliente()
        habilitarCombosContacto()
        nro = Integer.Parse(dataGridView1.CurrentRow.Cells(0).Value.ToString())
        cargarFormClientes(nro)
        cargarGrillaContacto()
        txtLimiteCred.Enabled = False
    End Sub



    Private Sub cargarFormClientes(ByVal nro As Integer) 'metodo para cargar un cliente cuando hago double click en la grilla
        Dim cli As New NEGCliente()
        cli = daoCli.DAOBuscarClienteID(nro)
        txtNroCliente.Text = Convert.ToString(cli.nroCli)
        txtRazonSocial.Text = cli.razonSocial
        txtCalle.Text = cli.calle
        txtNroCalle.Text = Convert.ToString(cli.nro)
        txtPiso.Text = Convert.ToString(cli.piso)
        txtDepto.Text = Convert.ToString(cli.piso)
        txtCP.Text = Convert.ToString(cli.cp)
        cmbBarrio.SelectedIndex = cli.barrio - 1
        cmbLocalidad.SelectedIndex = cli.localidad - 1
        txtMail.Text = cli.mail
        txtObserGral.Text = cli.observ
        txtLimiteCred.Text = Convert.ToString(cli.limiteCred)

    End Sub


    Private Sub txtRazonSocial_Validated(ByVal sender As Object, ByVal e As EventArgs) Handles txtRazonSocial.Validated 'metodo q se fija si el nombre del cliente a cargar ya existe al perder el foco
        Dim band As Boolean
        Dim valid As New DAOValidar
        If txtRazonSocial.Text = "" Then
            Return
        End If
        'si el textbox no tiene nada, no hago nada
        band = valid.nombreCliente(txtRazonSocial.Text)
        If band = True Then
            'si devuelve true es q ya existe ese nombre
            'si existe le consulto si desea cargar uno con el mismo nombre o no
            If MessageBox.Show("El Cliente ya existe, ¿desea cargar uno con el mismo nombre?", "Precaución", MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk) = DialogResult.No Then
                txtRazonSocial.Text = ""  'si quiere cambiarle el nombre, borro el txt y le hago foco
                txtRazonSocial.Focus()
            End If
        End If
    End Sub

    Private Sub btnQuitar_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnQuitar.Click 'elimino el contacto seleccionado
        Dim id As Integer
        id = Integer.Parse(dataGridView2.CurrentRow.Cells("id").Value.ToString())
        If MessageBox.Show("¿Realmente quiere eliminar el contacto seleccionado?", "Precaución", MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk) = DialogResult.Yes Then
            daoCli.eliminarContacto(id)
            cargarGrillaContacto()
        End If

    End Sub

    Private Sub cmbQuitarCliente_Click(ByVal sender As Object, ByVal e As EventArgs) Handles cmbQuitarCliente.Click 'elimino el contacto con sus clientes

        Dim id As Integer
        id = Integer.Parse(dataGridView1.CurrentRow.Cells(0).Value.ToString())
        If MessageBox.Show("¿Realmente quiere eliminar el cliente seleccionado junto a sus contactos?", "Precaución", MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk) = DialogResult.Yes Then
            daoCli.eliminarCliente(id)
            cargarGrilla()
            limpiarForm()
            desabilitarCombos()
        End If

    End Sub

    Private Sub dataGridView2_CellDoubleClick(ByVal sender As Object, ByVal e As DataGridViewCellEventArgs) Handles dataGridView2.CellDoubleClick 'modificar los contactos
        modificarContacto = True
        idContacto = Integer.Parse(dataGridView2.CurrentRow.Cells("id").Value.ToString())
        cargarFormContacto(idContacto)
    End Sub

    Private Sub cargarFormContacto(ByVal idContact As Integer) 'carga el cform de los contactos seleccionado para modificar
        Dim con As New NEGContacto()
        con = daoCli.DAOBuscarContacto(idContact)
        txtNombre.Text = con.nombre
        txtApe.Text = con.ape
        txtDescrip.Text = con.descrip
        txtMailCont.Text = con.mail
        txtTelCont.Text = Convert.ToString(con.tel)
        txtObserCont.Text = con.observ
        tabControl1.SelectedIndex = 1 'hago foco en la pestaña con los datos
    End Sub

    Private Sub txtBuscarRZ_TextChanged(ByVal sender As Object, ByVal e As EventArgs) Handles txtBuscarRZ.TextChanged
        'evento para filtrar en la busqueda del cliente
        Dim nombre As String
        nombre = txtBuscarRZ.Text
        dataGridView1.DataSource = daoCli.buscarClienteXNombre(nombre)
    End Sub


    Private Sub FrmCliente_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    End Sub

End Class